// fire a particle by remote control to a particular target
// color is taken from the color property of face 0
vector color = <1.0, 1.0, 1.0>;
key id = NULL_KEY;
integer cnt = 0;
float age = 0.0;
float LONGTIME = 99999.0;

particleson() {
        llParticleSystem(
        [
            PSYS_PART_FLAGS,
                PSYS_PART_EMISSIVE_MASK |
                PSYS_PART_FOLLOW_SRC_MASK |
                PSYS_PART_INTERP_SCALE_MASK |
                PSYS_PART_TARGET_POS_MASK,
                
            PSYS_SRC_PATTERN,
                PSYS_SRC_PATTERN_DROP,
            
            PSYS_SRC_BURST_RADIUS, 0.01,
            PSYS_SRC_TARGET_KEY, id,
            PSYS_PART_START_COLOR, color,
            
            PSYS_PART_START_SCALE, <0.08, 0.08, 0.08>,
            PSYS_PART_END_SCALE, <0.04, 0.04, 0.04>,    // resolution is 0.03125
            
//            PSYS_SRC_TEXTURE, "bdd55733-13dd-df5b-9128-90c3b13f6570",
            
            PSYS_PART_MAX_AGE, age,
            
            PSYS_SRC_BURST_RATE, 0.1,
            PSYS_SRC_BURST_PART_COUNT, cnt,
            
            PSYS_SRC_BURST_SPEED_MAX, 0.1,
            PSYS_SRC_BURST_SPEED_MIN, 0.07
        ]);
} 

particlesoff() {
        llParticleSystem(
        [
            PSYS_PART_FLAGS,
                PSYS_PART_EMISSIVE_MASK |
                PSYS_PART_FOLLOW_SRC_MASK |
                PSYS_PART_INTERP_SCALE_MASK |
                PSYS_PART_TARGET_POS_MASK,
                
            PSYS_SRC_PATTERN,
                PSYS_SRC_PATTERN_DROP,
            
            PSYS_SRC_BURST_RADIUS, 0.01,
            PSYS_SRC_TARGET_KEY, id,
            PSYS_PART_START_COLOR, color,
            
            PSYS_PART_START_SCALE, <0.08, 0.08, 0.08>,
            PSYS_PART_END_SCALE, <0.04, 0.04, 0.04>,    // resolution is 0.03125
            
//            PSYS_SRC_TEXTURE, "bdd55733-13dd-df5b-9128-90c3b13f6570",
            
            PSYS_PART_MAX_AGE, age,
            
            PSYS_SRC_BURST_RATE, LONGTIME,
            PSYS_SRC_BURST_PART_COUNT, 0,
            
            PSYS_SRC_BURST_SPEED_MAX, 0.1,
            PSYS_SRC_BURST_SPEED_MIN, 0.07
        ]);
}
 
default
{
    on_rez(integer x) {
        llResetScript();
    }
    
    state_entry()
    {
        particlesoff();
        color = llGetColor(0);
    }
    
    link_message(integer sender_num, integer num, string str, key in_id) {
        if (sender_num == LINK_ROOT) {
            id=in_id;
            cnt=num;
            age=(float)str;
            particleson();
            llSetTimerEvent(0.1);
        }
    }
    
    timer()
    {
        llSetTimerEvent(0.0);
        particlesoff();
    }
        

}

